/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.vdab.util;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;



/**
 *
 * @author dries.thieren
 */
public class Datum implements Serializable,Comparable {
    private final int dag;
    private final int maand;
    private final int jaar;
    private Calendar date= Calendar.getInstance();
    private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    
    public Datum(int dag, int maand, int jaar) throws DatumException {

        int maxdag=31;
        boolean schrikkeljaar=false;
        //test schrikkeljaar
     
        if (jaar%4==0 && jaar%100!=0)
            schrikkeljaar=true;
        if (jaar%400==0)
            schrikkeljaar=true;
        if (schrikkeljaar==true && maand==2)
            maxdag=29;
        if (schrikkeljaar==false && maand==2)
            maxdag=28;
        
        if (dag<=maxdag && dag>0 &&maand<13 && maand>0 && jaar < 4100 && jaar >1582  ) {
            this.dag=dag;
            this.maand=maand;
            this.jaar=jaar;
            date.set(jaar, maand-1, dag);

               
        }
        else throw new DatumException("Datum verkeerd");
       
        }
        
    
  
    @Override
    public String toString() {
       return sdf.format(date.getTime());
     
        

       
    }
    @Override
    public boolean equals(Object obj) {
                if (obj == null) {
            return false;
        }
        if (obj.getClass() != getClass()) {
            return false;
        }
        Datum deDatum = (Datum) obj;
        if (this.hashCode() == deDatum.hashCode()) {
            return true;
        }
        return false;
    }
    @Override 
    public int hashCode() {
        
        return date.hashCode();
    }
    
    @Override
    public int compareTo(Object o) {
              if (o==null)
        throw new NullPointerException();
    else
       if (o instanceof Datum)
          { Datum d = (Datum) o;
        
return this.date.compareTo(d.getDate());
          }
              else
        throw new IllegalArgumentException("Je vergelijkt een "+ o.getClass() + "-object met een Cursus-object");
    

    }

    public  int getDag() {
        return dag;
    }

    public  int getMaand() {
        return maand;
    }

    public  int getJaar() {
        return jaar;
    }
    public Calendar getDate() {
        return date;
    }
           
    
}
